package oppo

import (
	"crypto/hmac"
	"crypto/sha256"
	"dta-apk/utils"
	"encoding/hex"
	"sort"
	"strconv"
	"strings"
)

// 公共参数
func getCommonParam() map[string]string {
	// 获取token
	token := accessToken()
	param := map[string]string{
		"access_token": token,
		"timestamp":    strconv.FormatInt(utils.TimeStamp(), 10),
	}

	return param
}

// 公共头
func getHeaders() map[string]string {
	headers := map[string]string{
		"Content-Type": "application/x-www-form-urlencoded",
	}
	return headers
}

// 请求接口地址
func getUrl(api string) string {
	return domain_url + api
}

// 签名，并且自动放入参数集合中
func sign(data *map[string]string, key string) {
	// 创建一个新的 HMAC-SHA256 对象
	h := hmac.New(sha256.New, []byte(key))

	// 写入要签名的数据
	h.Write([]byte(getUrlParamsFromMap(*data)))

	// 计算签名结果
	signature := h.Sum(nil)

	// 将签名结果转换为十六进制字符串
	signatureHex := hex.EncodeToString(signature)

	(*data)["api_sign"] = signatureHex
}

// map拼接请求参数
func getUrlParamsFromMap(paramMap map[string]string) string {
	// 提取map的所有键
	keys := make([]string, len(paramMap))
	i := 0
	for key := range paramMap {
		if paramMap[key] != "" {
			keys[i] = key
		}
		i++
	}
	params := []string{}
	// 按键的ASCII码进行排序
	sort.Strings(keys)
	for _, key := range keys {
		if key != "sign" {
			temp_param := key + "=" + paramMap[key]
			params = append(params, temp_param)
		}
	}
	// 使用&拼接
	url := strings.Join(params, "&")

	return url
}
